/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP
// This file is generated from clusters-Enums.h.zapt

#pragma once

#include <clusters/shared/Enums.h>
#include <cstdint>

namespace chip
{
namespace app
{
	namespace Clusters
	{
		namespace Thermostat
		{

			// Enum for ACCapacityFormatEnum
			enum class ACCapacityFormatEnum : uint8_t {
				kBTUh = 0x00,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 1,
			};

			// Enum for ACCompressorTypeEnum
			enum class ACCompressorTypeEnum : uint8_t {
				kUnknown = 0x00,
				kT1 = 0x01,
				kT2 = 0x02,
				kT3 = 0x03,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 4,
			};

			// Enum for ACLouverPositionEnum
			enum class ACLouverPositionEnum : uint8_t {
				kClosed = 0x01,
				kOpen = 0x02,
				kQuarter = 0x03,
				kHalf = 0x04,
				kThreeQuarters = 0x05,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 0,
			};

			// Enum for ACRefrigerantTypeEnum
			enum class ACRefrigerantTypeEnum : uint8_t {
				kUnknown = 0x00,
				kR22 = 0x01,
				kR410a = 0x02,
				kR407c = 0x03,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 4,
			};

			// Enum for ACTypeEnum
			enum class ACTypeEnum : uint8_t {
				kUnknown = 0x00,
				kCoolingFixed = 0x01,
				kHeatPumpFixed = 0x02,
				kCoolingInverter = 0x03,
				kHeatPumpInverter = 0x04,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 5,
			};

			// Enum for ControlSequenceOfOperationEnum
			enum class ControlSequenceOfOperationEnum : uint8_t {
				kCoolingOnly = 0x00,
				kCoolingWithReheat = 0x01,
				kHeatingOnly = 0x02,
				kHeatingWithReheat = 0x03,
				kCoolingAndHeating = 0x04,
				kCoolingAndHeatingWithReheat = 0x05,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 6,
			};

			// Enum for PresetScenarioEnum
			enum class PresetScenarioEnum : uint8_t {
				kOccupied = 0x01,
				kUnoccupied = 0x02,
				kSleep = 0x03,
				kWake = 0x04,
				kVacation = 0x05,
				kGoingToSleep = 0x06,
				kUserDefined = 0xFE,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 0,
			};

			// Enum for SetpointChangeSourceEnum
			enum class SetpointChangeSourceEnum : uint8_t {
				kManual = 0x00,
				kSchedule = 0x01,
				kExternal = 0x02,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 3,
			};

			// Enum for SetpointRaiseLowerModeEnum
			enum class SetpointRaiseLowerModeEnum : uint8_t {
				kHeat = 0x00,
				kCool = 0x01,
				kBoth = 0x02,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 3,
			};

			// Enum for StartOfWeekEnum
			enum class StartOfWeekEnum : uint8_t {
				kSunday = 0x00,
				kMonday = 0x01,
				kTuesday = 0x02,
				kWednesday = 0x03,
				kThursday = 0x04,
				kFriday = 0x05,
				kSaturday = 0x06,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 7,
			};

			// Enum for SystemModeEnum
			enum class SystemModeEnum : uint8_t {
				kOff = 0x00,
				kAuto = 0x01,
				kCool = 0x03,
				kHeat = 0x04,
				kEmergencyHeat = 0x05,
				kPrecooling = 0x06,
				kFanOnly = 0x07,
				kDry = 0x08,
				kSleep = 0x09,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 2,
			};

			// Enum for TemperatureSetpointHoldEnum
			enum class TemperatureSetpointHoldEnum : uint8_t {
				kSetpointHoldOff = 0x00,
				kSetpointHoldOn = 0x01,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 2,
			};

			// Enum for ThermostatRunningModeEnum
			enum class ThermostatRunningModeEnum : uint8_t {
				kOff = 0x00,
				kCool = 0x03,
				kHeat = 0x04,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 1,
			};

			// Bitmap for ACErrorCodeBitmap
			enum class ACErrorCodeBitmap : uint32_t {
				kCompressorFail = 0x1,
				kRoomSensorFail = 0x2,
				kOutdoorSensorFail = 0x4,
				kCoilSensorFail = 0x8,
				kFanFail = 0x10,
			};

			// Bitmap for Feature
			enum class Feature : uint32_t {
				kHeating = 0x1,
				kCooling = 0x2,
				kOccupancy = 0x4,
				kScheduleConfiguration = 0x8,
				kSetback = 0x10,
				kAutoMode = 0x20,
				kLocalTemperatureNotExposed = 0x40,
				kMatterScheduleConfiguration = 0x80,
				kPresets = 0x100,
			};

			// Bitmap for HVACSystemTypeBitmap
			enum class HVACSystemTypeBitmap : uint8_t {
				kCoolingStage = 0x3,
				kHeatingStage = 0xC,
				kHeatingIsHeatPump = 0x10,
				kHeatingUsesFuel = 0x20,
			};

			// Bitmap for OccupancyBitmap
			enum class OccupancyBitmap : uint8_t {
				kOccupied = 0x1,
			};

			// Bitmap for PresetTypeFeaturesBitmap
			enum class PresetTypeFeaturesBitmap : uint16_t {
				kAutomatic = 0x1,
				kSupportsNames = 0x2,
			};

			// Bitmap for ProgrammingOperationModeBitmap
			enum class ProgrammingOperationModeBitmap : uint8_t {
				kScheduleActive = 0x1,
				kAutoRecovery = 0x2,
				kEconomy = 0x4,
			};

			// Bitmap for RelayStateBitmap
			enum class RelayStateBitmap : uint16_t {
				kHeat = 0x1,
				kCool = 0x2,
				kFan = 0x4,
				kHeatStage2 = 0x8,
				kCoolStage2 = 0x10,
				kFanStage2 = 0x20,
				kFanStage3 = 0x40,
			};

			// Bitmap for RemoteSensingBitmap
			enum class RemoteSensingBitmap : uint8_t {
				kLocalTemperature = 0x1,
				kOutdoorTemperature = 0x2,
				kOccupancy = 0x4,
			};

			// Bitmap for ScheduleDayOfWeekBitmap
			enum class ScheduleDayOfWeekBitmap : uint8_t {
				kSunday = 0x1,
				kMonday = 0x2,
				kTuesday = 0x4,
				kWednesday = 0x8,
				kThursday = 0x10,
				kFriday = 0x20,
				kSaturday = 0x40,
				kAway = 0x80,
			};

			// Bitmap for ScheduleModeBitmap
			enum class ScheduleModeBitmap : uint8_t {
				kHeatSetpointPresent = 0x1,
				kCoolSetpointPresent = 0x2,
			};

			// Bitmap for ScheduleTypeFeaturesBitmap
			enum class ScheduleTypeFeaturesBitmap : uint16_t {
				kSupportsPresets = 0x1,
				kSupportsSetpoints = 0x2,
				kSupportsNames = 0x4,
				kSupportsOff = 0x8,
			};
		} // namespace Thermostat
	} // namespace Clusters
} // namespace app
} // namespace chip
